home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / magplip / source / crc16.asm next >
Assembly Source File  |  1995-08-20  |  4KB  |  90 lines

  1. ;
  2. ;  $VER: crc16.asm 1.2 (20 Aug 1995)
  3. ;
  4. ;  magplip.device - Parallel Line Internet Protocol
  5. ;
  6. ;  Fast table-driven CRC routines.
  7. ;
  8. ;  Original code written by Oliver Wagner and Michael Balzer.
  9. ;
  10. ;  This version has been completely reworked by Marius Gröger, introducing
  11. ;  slight protocol changes. The new source is a lot better organized and
  12. ;  maintainable.
  13. ;
  14. ;  Additional changes and code cleanup by Jan Kratochvil and Martin Mares.
  15. ;  The new source is significantly faster and yet better maintainable.
  16. ;
  17. ;  (C) Copyright 1993-1994 Oliver Wagner & Michael Balzer
  18. ;  (C) Copyright 1995 Marius Gröger
  19. ;  (C) Copyright 1995 Jan Kratochvil & Martin Mares
  20. ;      All Rights Reserved
  21. ;
  22. ;  $HISTORY:
  23. ;
  24. ;  20 Aug 1995 : 001.002 :  tab->space conversion, minor face-lifting
  25. ;  13 Aug 1995 : 001.001 :  cleanup (jk/mm)
  26. ;  12 Feb 1995 : 001.000 :  created
  27. ;
  28.  
  29.         section "text",code
  30.  
  31. ; crc16 = CRC16(dataptr,datalen)
  32. ;  d0[0:16]       a0      d0
  33.  
  34.          xdef    _CRC16
  35.  
  36. _CRC16   movem.l d2/d3/d4,-(sp)           ; preserve registers
  37.          moveq   #0,d1                    ; init crc
  38.          lea     crctab(pc),a1
  39.          bra.s   crcloop2
  40.  
  41. crcloop  move.l  d1,d2
  42.          move.l  d1,d3
  43.          asl.w   #8,d3                    ; crc <<8
  44.          lsr.w   #8,d2                    ; crc >>8
  45.          add.w   d2,d2                    ; for 020+
  46.          move.w  0(a1,d2.w),d1            ; move.w (a1,d2.w*2),d1
  47.          eor.w   d3,d1
  48.          move.b  (a0)+,d4
  49.          eor.b   d4,d1
  50. crcloop2 dbf     d0,crcloop
  51.  
  52.          movem.l (sp)+,d2/d3/d4           ; restore registers
  53.          move.l  d1,d0                    ; return value
  54.          rts
  55.  
  56. crctab   dc.w $0000,$1021,$2042,$3063,$4084,$50a5,$60c6,$70e7
  57.          dc.w $8108,$9129,$a14a,$b16b,$c18c,$d1ad,$e1ce,$f1ef
  58.          dc.w $1231,$0210,$3273,$2252,$52b5,$4294,$72f7,$62d6
  59.          dc.w $9339,$8318,$b37b,$a35a,$d3bd,$c39c,$f3ff,$e3de
  60.          dc.w $2462,$3443,$0420,$1401,$64e6,$74c7,$44a4,$5485
  61.          dc.w $a56a,$b54b,$8528,$9509,$e5ee,$f5cf,$c5ac,$d58d
  62.          dc.w $3653,$2672,$1611,$0630,$76d7,$66f6,$5695,$46b4
  63.          dc.w $b75b,$a77a,$9719,$8738,$f7df,$e7fe,$d79d,$c7bc
  64.          dc.w $48c4,$58e5,$6886,$78a7,$0840,$1861,$2802,$3823
  65.          dc.w $c9cc,$d9ed,$e98e,$f9af,$8948,$9969,$a90a,$b92b
  66.          dc.w $5af5,$4ad4,$7ab7,$6a96,$1a71,$0a50,$3a33,$2a12
  67.          dc.w $dbfd,$cbdc,$fbbf,$eb9e,$9b79,$8b58,$bb3b,$ab1a
  68.          dc.w $6ca6,$7c87,$4ce4,$5cc5,$2c22,$3c03,$0c60,$1c41
  69.          dc.w $edae,$fd8f,$cdec,$ddcd,$ad2a,$bd0b,$8d68,$9d49
  70.          dc.w $7e97,$6eb6,$5ed5,$4ef4,$3e13,$2e32,$1e51,$0e70
  71.          dc.w $ff9f,$efbe,$dfdd,$cffc,$bf1b,$af3a,$9f59,$8f78
  72.          dc.w $9188,$81a9,$b1ca,$a1eb,$d10c,$c12d,$f14e,$e16f
  73.          dc.w $1080,$00a1,$30c2,$20e3,$5004,$4025,$7046,$6067
  74.          dc.w $83b9,$9398,$a3fb,$b3da,$c33d,$d31c,$e37f,$f35e
  75.          dc.w $02b1,$1290,$22f3,$32d2,$4235,$5214,$6277,$7256
  76.          dc.w $b5ea,$a5cb,$95a8,$8589,$f56e,$e54f,$d52c,$c50d
  77.          dc.w $34e2,$24c3,$14a0,$0481,$7466,$6447,$5424,$4405
  78.          dc.w $a7db,$b7fa,$8799,$97b8,$e75f,$f77e,$c71d,$d73c
  79.          dc.w $26d3,$36f2,$0691,$16b0,$6657,$7676,$4615,$5634
  80.          dc.w $d94c,$c96d,$f90e,$e92f,$99c8,$89e9,$b98a,$a9ab
  81.          dc.w $5844,$4865,$7806,$6827,$18c0,$08e1,$3882,$28a3
  82.          dc.w $cb7d,$db5c,$eb3f,$fb1e,$8bf9,$9bd8,$abbb,$bb9a
  83.          dc.w $4a75,$5a54,$6a37,$7a16,$0af1,$1ad0,$2ab3,$3a92
  84.          dc.w $fd2e,$ed0f,$dd6c,$cd4d,$bdaa,$ad8b,$9de8,$8dc9
  85.          dc.w $7c26,$6c07,$5c64,$4c45,$3ca2,$2c83,$1ce0,$0cc1
  86.          dc.w $ef1f,$ff3e,$cf5d,$df7c,$af9b,$bfba,$8fd9,$9ff8
  87.          dc.w $6e17,$7e36,$4e55,$5e74,$2e93,$3eb2,$0ed1,$1ef0
  88.  
  89.         end
  90.